package com.evil.account.api;

import com.evil.account.config.AccountFeignErrorDecoder;
import com.evil.common.account.dto.user.UserBaseRespDTO;
import com.evil.common.account.dto.user.UserEnterpriseBaseDTO;
import com.evil.common.account.dto.user.role.RoleUsersReqDTO;
import com.evil.common.account.dto.user.role.UserRoleBaseRespDTO;
import com.evil.common.family.constant.ServiceNameConstant;
import com.evil.common.family.dto.FindByIdReqDTO;
import com.evil.common.family.dto.FindByIdsReqDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

/**
 * 用户角色接口
 *
 * @author liyang
 * @date 2022-08-08 00:00
 */
@FeignClient(name = ServiceNameConstant.ACCOUNT_SERVICE, configuration = {AccountFeignErrorDecoder.class})
public interface RemoteUserRoleService {

    /**
     * 获取指定角色 用户id
     *
     * @param findByIdReqDTO findByIdReqDTO
     * @return userIds
     */
    @PostMapping("/remote/user/role/user-ids-by-role-id")
    List<Long> findUserIdsByRoleId(@Validated @RequestBody FindByIdReqDTO findByIdReqDTO);

    /**
     * 获取指定角色 用户基础信息列表
     *
     * @param findByIdsReqDTO findByIdsReqDTO
     * @return userIds
     */
    @PostMapping("/remote/user/role/user-bases-by-role-ids")
    List<UserBaseRespDTO> findUserBasesByRoleIds(@Validated @RequestBody FindByIdsReqDTO findByIdsReqDTO);

    /**
     * 获取指定角色 用户ids
     *
     * @param findByIdsReqDTO findByIdsReqDTO
     * @return userIds
     */
    @PostMapping("/remote/user/role/user-ids-by-role-ids")
    List<Long> findUserIdsByRoleIds(@Validated @RequestBody FindByIdsReqDTO findByIdsReqDTO);

    /**
     * 用户角色基础信息
     *
     * @param userEnterpriseDTO userEnterpriseDTO
     * @return RoleBaseRespDTO 列表
     */
    @PostMapping("/remote/user-role-bases")
    List<UserRoleBaseRespDTO> userRoleBases(@Validated @RequestBody UserEnterpriseBaseDTO userEnterpriseDTO);

    /**
     * 角色批量删除用户
     *
     * @param roleUsersReqDTO roleUsersReqDTO
     */
    @PostMapping("/remote/user/role/batch-delete")
    void deleteUserRoleBatch(@Validated @RequestBody RoleUsersReqDTO roleUsersReqDTO);

    /**
     * 角色批量新增用户
     *
     * @param roleUsersReqDTO roleUsersReqDTO
     */
    @PostMapping("/remote/user/role/batch-add")
    void addUserRoleBatch(@Validated @RequestBody RoleUsersReqDTO roleUsersReqDTO);
}
